home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QRZ! Ham Radio 8
/
QRZ Ham Radio Callsign Database - Volume 8.iso
/
mac
/
files
/
infodata
/
callbook.tar
/
callbook_1.3
/
callbook.c
next >
Wrap
C/C++ Source or Header
|
1991-08-27
|
6KB
|
361 lines
/*
* Telnet callsign server sources copyright 1989 by Devon Bowen, KA2NRC.
* You may distribute and modify these files as you please as long as
* as long as credit to the original creator is given. Please report any
* bug fixes or modification to bowen@cs.buffalo.edu.
*/
#include <stdio.h>
#include <ctype.h>
#include <syslog.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/telnet.h>
#include "callbook.h"
int output=0; /* set output to data mode */
char *param(), tgetchar();
extern int max_row;
extern int (*p_routine[])(); /* array of printer routines */
main()
{
char cmd[BUFSIZ];
int catch_size, quit=0;
struct sockaddr_in catch_host;
openlog("callsign", LOG_PID, LOG_USER);
catch_size = sizeof(struct sockaddr_in);
if (!getpeername(1, (struct sockaddr_in *) &catch_host, &catch_size))
syslog(LOG_INFO, "starting from %s",
inet_ntoa(catch_host.sin_addr));
tinit();
tputs("Callbook v1.3 Bug reports to bowen@cs.buffalo.edu Type ", 0);
tputs("'help' for help\n>> ", 1);
while (!quit) {
char *cmdstr;
if (tgets(cmd, BUFSIZ-1) == NULL)
tputs("Command line overflow\n", 0);
else if (paramnum(cmd) == -1)
tputs("Bad input\n", 0);
else if (!(cmdstr = param(cmd, 0)))
;
else if (!strcasecmp(cmdstr, "help"))
help(cmd);
else if (!strcasecmp(cmdstr, "info"))
info(cmd);
else if (!strcasecmp(cmdstr, "set"))
set(cmd);
else if (!strcasecmp(cmdstr, "more"))
more(cmd);
else if (!strcasecmp(cmdstr, "name"))
name(cmd);
else if (!strcasecmp(cmdstr, "city"))
city(cmd);
else if (!strcasecmp(cmdstr, "zip"))
zip(cmd);
else if (!strcasecmp(cmdstr, "call"))
call(cmd);
else if (!strcasecmp(cmdstr, "quit"))
quit = 1;
else
tputs("Unknown command\n", 0);
if (!quit)
tputs(">> ", 1);
}
sleep(1);
}
help(cmd)
char *cmd;
{
FILE *fd;
int para;
char *filename;
char buf[BUFSIZ];
if ((para = paramnum(cmd)) == -1) {
tputs("Bad input\n", 0);
return;
}
if (para > 2) {
tputs("Usage: help [command]\n", 0);
return;
}
if (para == 1)
filename = HELP_FILE;
else {
strcpy(buf, HELP_PREFIX);
strcat(buf, param(cmd, 1), 50);
filename = buf;
}
if ((fd = fopen(filename, "r")) == NULL) {
tputs("No help available\n", 0);
return;
}
while (fgets(buf, BUFSIZ-1, fd) != NULL)
if (tputs(buf, 0))
break;
fclose (fd);
}
info(cmd)
char *cmd;
{
FILE *fd;
int para;
char *buf[BUFSIZ];
if ((para = paramnum(cmd)) == -1) {
tputs("Bad input\n", 0);
return;
}
if (para != 1) {
tputs("Usage: info\n", 0);
return;
}
if ((fd = fopen(INFO_FILE, "r")) == NULL) {
tputs("Info file unavailable\n", 0);
return;
}
while (fgets(buf, BUFSIZ-1, fd) != NULL)
if (tputs(buf, 0))
break;
fclose (fd);
}
set(cmd)
char *cmd;
{
int para;
char *arg;
if ((para = paramnum(cmd)) == -1) {
tputs("Usage: set name|data|raw|addr\n", 0);
return;
}
if (para != 2) {
tputs("Usage: set name|data|raw|addr\n", 0);
return;
}
arg = param(cmd, 1);
if (!strcasecmp(arg, "data")) {
output = 0;
tputs("Output format is data\n", 0);
} else if (!strcasecmp(arg, "name")) {
output = 1;
tputs("Output format is name\n", 0);
} else if (!strcasecmp(arg, "raw")) {
output = 2;
tputs("Output format is raw\n", 0);
} else if (!strcasecmp(arg, "addr")) {
output = 3;
tputs("Output format is addr\n", 0);
} else
tputs("Output format unknown\n", 0);
}
more(cmd)
char *cmd;
{
int para;
char *arg;
if ((para = paramnum(cmd)) == -1) {
tputs("Usage: more rows\n", 0);
return;
}
if (para != 2) {
tputs("Usage: more rows\n", 0);
return;
}
max_row = atoi(param(cmd, 1));
}
name(cmd)
char *cmd;
{
int count, found_data=0, found_arg=0;
char state[BUFSIZ], *arg;
if (paramnum(cmd) == -1) {
tputs("Bad input\n", 0);
return;
}
if (filtsetup(cmd))
return;
for (count=1; arg = param(cmd, count); count++)
if (*arg != '-') {
found_arg = 1;
found_data += lookup(1, arg, p_routine[output]);
} else
count++;
if (!found_arg) {
tputs("Usage: name [filters] surname ...\n", 0);
return;
}
if (!found_data) {
tputs("No references found\n", 0);
return;
}
}
city(cmd)
char *cmd;
{
int count, found_data=0, found_arg=0;
char state[BUFSIZ], *arg;
if (paramnum(cmd) == -1) {
tputs("Bad input\n", 0);
return;
}
if (filtsetup(cmd))
return;
for (count=1; arg = param(cmd, count); count++)
if (*arg != '-') {
found_arg = 1;
found_data += lookup(9, arg, p_routine[output]);
} else
count++;
if (!found_arg) {
tputs("Usage: city [filters] cityname ...\n", 0);
return;
}
if (!found_data) {
tputs("No references found\n", 0);
return;
}
}
zip(cmd)
char *cmd;
{
int count, found_data=0, found_arg=0;
char state[BUFSIZ], *arg;
if (paramnum(cmd) == -1) {
tputs("Bad input\n", 0);
return;
}
if (filtsetup(cmd))
return;
for (count=1; arg = param(cmd, count); count++)
if (*arg != '-') {
found_arg = 1;
found_data += lookup(11, arg, p_routine[output]);
} else
count++;
if (!found_arg) {
tputs("Usage: zip [filters] zipcode ...\n", 0);
return;
}
if (!found_data) {
tputs("No references found\n", 0);
return;
}
}
call(cmd)
char *cmd;
{
int count, found_data=0, found_arg=0;
char state[BUFSIZ], *arg;
if (paramnum(cmd) == -1) {
tputs("Bad input\n", 0);
return;
}
if (filtsetup(cmd))
return;
for (count=1; arg = param(cmd, count); count++)
if (*arg != '-') {
found_arg = 1;
found_data += lookup(0, arg, p_routine[output]);
found_data += lookup(16, arg, p_routine[output]);
} else
count++;
if (!found_arg) {
tputs("Usage: call [filters] callsign ...\n", 0);
return;
}
if (!found_data) {
tputs("No references found\n", 0);
return;
}
}